package com.doubao.file.service;

import com.doubao.file.dto.FileInfoResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件服务接口
 */
public interface FileService {

    /**
     * 上传用户头像
     *
     * @param file   头像文件
     * @param userId 用户ID
     * @return 文件信息
     */
    FileInfoResponse uploadAvatar(MultipartFile file, Long userId) throws Exception;

    /**
     * 上传聊天记录文件
     *
     * @param file   文件
     * @param userId 用户ID
     * @param chatId 聊天ID
     * @return 文件信息
     */
    FileInfoResponse uploadChatRecord(MultipartFile file, Long userId, String chatId) throws Exception;

    /**
     * 获取文件URL
     *
     * @param objectName 对象名称
     * @return 文件URL
     */
    String getFileUrl(String objectName) throws Exception;

    /**
     * 获取头像URL
     *
     * @param objectName 对象名称
     * @return 头像URL
     */
    String getAvatarUrl(String objectName) throws Exception;

    /**
     * 获取聊天记录URL
     *
     * @param objectName 对象名称
     * @return 聊天记录URL
     */
    String getChatRecordUrl(String objectName) throws Exception;

    /**
     * 删除文件
     *
     * @param objectName 对象名称
     */
    void deleteFile(String objectName) throws Exception;

    /**
     * 批量删除文件
     *
     * @param objectNames 对象名称列表
     */
    void deleteFiles(List<String> objectNames) throws Exception;

    /**
     * 获取聊天记录文件列表
     *
     * @param userId 用户ID
     * @param chatId 聊天ID
     * @return 文件列表
     */
    List<FileInfoResponse> getChatFiles(Long userId, String chatId) throws Exception;

    /**
     * 获取用户头像文件列表
     *
     * @param userId 用户ID
     * @return 文件列表
     */
    List<FileInfoResponse> getUserFiles(Long userId) throws Exception;

    /**
     * 保存聊天消息为文件
     *
     * @param userId 用户ID
     * @param chatId 聊天ID
     * @param content 消息内容
     * @param messageId 消息ID
     * @return 文件信息
     */
    FileInfoResponse saveChatMessage(Long userId, String chatId, String content, String messageId) throws Exception;
}